package com.example.controller;

import com.example.anno.Log;
import com.example.pojo.Dept;
import com.example.pojo.Result;
import com.example.service.DeptService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j //日志注解
@RequestMapping("/depts")  //公共路径
@RestController
public class DeptController {

    //private static final Logger log= LoggerFactory.getLogger(DeptController.class);

    /**
     * 查询所有部门信息
     */
    @Autowired
    private DeptService deptService;
    //@RequestMapping(value = "/depts",method = RequestMethod.GET)
    @GetMapping//限制为get请求方式
    public Result list() {
        //System.out.println("查询所有部门信息");
        log.info("查询所有部门信息");
        List<Dept> list = deptService.findAll();
        return Result.success(list);
    }


    /**
     * 删除部门信息
     */
    //方式一:通过原始的HttpServletRequest对象获取请求参数
//    @DeleteMapping
//    public Result delete(HttpServletRequest request){
//        System.out.println("删除部门信息");
//        String id1 = request.getParameter("id");
//        int id = Integer.parseInt(id1);
//        deptService.delete(id);
//        return Result.success();
//    }

    //方式二:通过@RequestParam注解获取请求参数(形参和请求参数名不一致需使用注解)
//    @DeleteMapping          //required = false表示请求参数可以不传
//    public Result delete(@RequestParam(value = "id",required = false) Integer deptid) {
//        System.out.println("删除部门信息");
//        deptService.delete(deptid);
//        return Result.success();
//    }

    //方式三:可省略RequestParam注解(形参和请求参数名一致)
    @Log
    @DeleteMapping
    public Result delete(Integer id) {
        //System.out.println("根据ID删除部门信息"+id);
        log.info("根据ID删除部门信息:{}",id); //{}占位符
        deptService.delete(id);
        return Result.success();
    }

    /**
     * 新增部门
     */
    @Log
    @PostMapping  //post 请求方式前端传递JSON格式的数据
    public Result add(@RequestBody Dept dept){ //@RequestBody注解表示将请求体中的JSON数据转换为Dept对象
        //System.out.println("新增部门信息"+dept);
        log.info("新增部门信息:{}",dept);
        deptService.add(dept);
        return Result.success();
    }

    /**
     * 根据ID查询部门
     */
//    @GetMapping("/{id}")
//    public Result getInfo(@PathVariable("id") Integer deptid){
//        System.out.println("根据ID查询部门信息"+deptid);
//        return Result.success();
//    }

    @GetMapping("/{id}")     //完整路径为公共路径+括号里的路径,即 /depts/{id}
    public Result getInfo(@PathVariable Integer id){ //参数名和形参名一致，可以省略@PathVariable注解
        //System.out.println("根据ID查询部门信息"+id);
        log.info("根据ID查询部门信息:{}",id);
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

    /**
     * 修改部门信息
     */
    @Log
    @PutMapping
    public Result update(@RequestBody Dept dept){
        //System.out.println("修改部门信息"+dept);
        log.info("修改部门信息:{}",dept);
        deptService.update(dept);
        return Result.success();
    }

}
